import { DD_SYSTEM } from '@/constants/api-pre';
import { request } from '@/service/request';

/** 文件对象实体 */
export type File = Api.Common.CommonRecord<{
  // 文件配置编号
  configId: number;
  // 文件路径 URL
  path: string;
  // 文件类型
  type: string;
  // 文件媒体类型
  mineType: string;
  // 文件大小
  size: number;
  // 文件 名称
  name: string;
  // 文件 内容
  content: string;
  // 文件 URL
  url: string;
  // 创建时间
  createTime: string;
}>;

/** 文件预签名地址对象实体 */
export type FilePreSignedUrlVO = Api.Common.CommonRecord<{
  // 文件配置编号
  configId: number;
  // 文件上传 URL
  uploadUrl: string;
  // 文件 URL
  url: string;
}>;

export type FileList = Api.Common.PaginatingQueryRecord<File>;

/** 文件配置查询参数 */
export type FileSearchParams = CommonType.RecordNullable<
  Api.Common.CommonSearchParams & {
    /** 创建时间 */
    createTime: null;
    path: '';
    type: '';
  }
>;

export type FileEditAndCreateParams = CommonType.RecordNullable<Pick<File, 'url'>>;

/** 获取文件配置表单 URL */
export function getFetchFileUrl(id: number) {
  return `${DD_SYSTEM}/file/${id}/form`;
}

/** 获取文件列表 */
export function fetchGetFileList(params?: FileSearchParams) {
  return request<FileList>({
    url: `${DD_SYSTEM}/file/page`,
    method: 'get',
    params
  });
}

/**
 * 上传文件
 *
 * @param data
 */
export function uploadFile(data: any) {
  return request<string>({
    url: `${DD_SYSTEM}/file/upload`,
    method: 'post',
    data,
    headers: { 'Content-Type': 'multipart/form-data' }
  });
}

/**
 * 创建文件
 *
 * @param data
 * @returns
 */
export const createFile = (data: any) => {
  return request<number>({ url: `${DD_SYSTEM}/file`, data });
};

/**
 * 删除文件
 *
 * @param id
 */
export function deleteFile(id: string) {
  return request<boolean>({
    url: `${DD_SYSTEM}/file/${id}`,
    method: 'delete'
  });
}

/**
 * 获取文件预签名地址
 *
 * @param path
 * @returns
 */
export const getFilePreSignedUrl = (path: string) => {
  return request<FilePreSignedUrlVO>({
    url: `${DD_SYSTEM}/file/pre-signed-url`,
    params: { path },
    method: 'get'
  });
};
